﻿using Stankovita.Model;
using System;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Navigation;

namespace Stankovita.Program.Pages.AddEditPages
{
    /// <summary>
    /// Логика взаимодействия для AddEditOrders.xaml
    /// </summary>
    public partial class AddEditOrders : Page
    {
        // Поле для хранения экземпляра добавляемого заказа
        private readonly Orders order = new Orders();

        public AddEditOrders(Orders selectOrder)
        {
            InitializeComponent();
            // Заполнение ComboBox's
            SelectMachineCmb.ItemsSource = Entities.GetContext().Manufactures.ToList();
            SelectMachineCmb.SelectedValuePath = "ID_machine";
            SelectMachineCmb.DisplayMemberPath = "nameMachine";
            SelectNameOrganizCmb.ItemsSource = Entities.GetContext().Customers.ToList();
            SelectNameOrganizCmb.SelectedValuePath = "ID_customer";
            SelectNameOrganizCmb.DisplayMemberPath = "nameOrganiz";

            if (selectOrder != null) 
                order = selectOrder;

            // Передача объекта класса для участия в привязке данных
            DataContext = order;
        }

        // Вернуться на страницу просмотра
        private void BackBtn_Click(object sender, RoutedEventArgs e)
        {
            NavigationService.Navigate(new View());
            GlobalVaribles.checkOnEdit = false;
        }

        // Сохранение данных
        private void SaveOrderBtn_Click(object sender, RoutedEventArgs e)
        {
            StringBuilder errors = new StringBuilder();
            if (SelectMachineCmb.SelectedIndex == -1)
                errors.AppendLine("* Не выбран станок!");
            if (SelectNameOrganizCmb.SelectedIndex == -1)
                errors.AppendLine("* Не выбран заказчик!");
            if (string.IsNullOrWhiteSpace(order.dateOrder.ToString()))
                errors.AppendLine("* Не указана дата!");
            if (order.amount == 0)
                errors.AppendLine("* Количество не может быть нулю!");

            // Если есть ошибки, то вывести их
            if (errors.Length > 0)
            {
                MessageBox.Show(errors.ToString());
                return;
            }

            // Если это новая запись, то добавить ее
            if (order.ID_order == 0)
                Entities.GetContext().Orders.Add(order);

            try
            {
                Entities.GetContext().SaveChanges();
                MessageBox.Show("Данные сохранены!");
                NavigationService.Navigate(new View());
            } catch (Exception ex)
            { MessageBox.Show(ex.Message); }
        }

        // Запрет на ввод букв в поле количества
        private void InputAmountTxb_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key < Key.D0 || e.Key > Key.D9) e.Handled = true;
        }
    }
}
